/*
 * Util.h
 *
 *   Created on: 2010-1-20     
 *  Description: 
 *    Copyright: 2010 @ ICT Li Heyuan
 */

#ifndef UTIL_H_
#define UTIL_H_
#include <string>
#include <map>
using std::string;
using std::map;

#include <semaphore.h>

#include "../crypto/RSATools.h"

class Util
{
public:

	/**
	 * 获得单件类
	 * @return
	 */
	static Util* getInstance();

	/**
	 * 释放分配的资源
	 */
	static void destory();

	/* 获得最近发生的errno的msg
	 * @return errno的string
	 */
	std::string getErrMsg();

	/**
	 * 返回IP对应的RSA的引用，线程安全
	 * return RSATools*，必须手动删除
	 */
	RSATools* getRSAToolsByIP(const string &ip);

	/**
	 * 根据IP，生成新的RSA密钥对,进程安全
	 * return RSATools
	 */
	RSATools* generateRSAToolsByIP(const string &ip);

	/* 获得格式化的日期 例如 2010-03-02 20:02.364
	 * @return 如上述的字符串
	 */
	static string getFormatTime();

	/* 去掉开头和结尾的换行符号
	 * @param 待处理的字符串
	 */
	static string replaceLine(const string& str);

	/* 放宽fd数量的限制
	 *
	 */
	static bool setFDLimit(unsigned long noFile = 102400);
private:
	//Singleton，不允许被用做对象
	Util();
	virtual ~Util();

	static Util *_instance;

	//ip:RSA加密工具（含公共、私有密钥）的集合
	map<string, RSATools> _rsaTools;
	//_rsaTools的互斥信号量(进程安全)
	sem_t _sem_rsaTools;
};

#endif /* UTIL_H_ */
